package br.com.aeso.bancoCurriculo.model.util;

import java.util.ArrayList;

import br.com.aeso.bancoCurriculo.model.comum.excecoes.NegocioException;
import br.com.aeso.bancoCurriculo.model.comum.excecoes.ProjetoException;
import br.com.aeso.bancoCurriculo.model.contato.Contato;
import br.com.aeso.bancoCurriculo.model.contato.ContatoService;
import br.com.aeso.bancoCurriculo.model.curriculo.Curriculo;
import br.com.aeso.bancoCurriculo.model.curriculo.CurriculoService;
import br.com.aeso.bancoCurriculo.model.curriculo.impl.CurriculoImpl;
import br.com.aeso.bancoCurriculo.model.usuario.Usuario;
import br.com.aeso.bancoCurriculo.model.usuario.UsuarioService;

/**
 * @author Giulliano Ferreira
 * 
 */
public final class Fachada {

    private static Fachada instancia = new Fachada();

    public static Fachada getInstancia() {
	return instancia;
    }

    // Services -------------------------------------------------------------

    public Usuario criarUsuario() throws ProjetoException {
	return (Usuario) this.getUsuarioService().criar();
    }
    
    public Curriculo criarCurriculo() {
    	
    	return (Curriculo) this.getCurriculoService().criar();
    }

    public Usuario obterUsuario(long chavePrimaria) throws ProjetoException {
	return (Usuario) this.getUsuarioService().obter(chavePrimaria);
    }

    public Long inserirUsuario(Usuario Usuario) throws ProjetoException {
	return this.getUsuarioService().inserir(Usuario);
    }
    
    public Long inserirCurriculo (Curriculo curriculo) throws NegocioException{
    	
    	return this.getCurriculoService().inserir(curriculo);
    }

    public void atualizarUsuario(Usuario Usuario) throws ProjetoException {
	this.getUsuarioService().atualizar(Usuario);
    }

    public void removerUsuario(Usuario Usuario) throws ProjetoException {
	this.getUsuarioService().remover(Usuario);
    }
    
    public Usuario validarLogin(String login, String senha)throws NegocioException {
    	return this.getUsuarioService().validarLogin(login, senha);
    }

    
    
    public ArrayList<CurriculoImpl> pesquisarTodosCurriculos (String nome, String radioButton){
    	
    	return this.getCurriculoService().pesquisarTodosCurriculos(nome,radioButton);
    	   	
    	
    }
    

    
	public Contato criarContato() throws ProjetoException {
		return (Contato) this.getContatoService().criar();
	}
	
	public Contato enviarMensagem(String email, String mensagem) throws ProjetoException {

		return this.getContatoService().enviarMensagem(email, mensagem);
	}
	
    // -------------------------------------------------------------

    private UsuarioService getUsuarioService() {
	return (UsuarioService) BeanFactory.getBean(UsuarioService.BEAN_NAME);
    }
    
    private CurriculoService getCurriculoService (){
    	
    	return (CurriculoService) BeanFactory.getBean(CurriculoService.BEAN_NAME);
    }
    
	private ContatoService getContatoService() {

		return (ContatoService) BeanFactory.getBean(ContatoService.BEAN_NAME);
	}
}